In order to speed up data transmissions and minimize storage requirements, a variety of compression methods have been used to reduce the size of a given input data file by removing redundancy from the original data in the input file. Such redundancy is removed by replacing (or encoding) symbols or strings of symbols with numerical codes or combinations of numeric codes and symbols. Thus, the resulting output file is smaller than the original input file. The major categories of compression methods include: run length encoding (RLE) methods, statistical methods, dictionary methods, and transforms.
RLE methods compress data by replacing consecutive occurrences of a symbol with one code containing the symbol and the number of the consecutive occurrences of the symbol. Statistical methods represent symbols and strings of symbols using codes of variable length, where shorter length codes are assigned to the more frequently occurring symbols or strings of symbols. Dictionary methods compress data by replacing strings of symbols with a token that indexes to the string in an accompanying dictionary. An example of a well-known dictionary method is LZ77, described on pages 154-157 of Data Compression: The Complete Reference by David Salomon, Second Edition, 2000. Transforms use the concept of a mathematical transform to compress image data by transforming correlated pixels to a decorrelated representation of the pixels. For a more detailed description of data compression methods, please refer to Data Compression: The Complete Reference by David Salomon, Second Edition, 2000.
Compression methods may be used by programs to compress multiple files into a single file, called an archive. ARC is an example of a program capable of compressing a collection of files into an archive. PKZIP, a variation of ARC, is another example of a compression/archive program. For a more detailed description of ARC and PKZip, please refer to pages 206-211 of Data Compression: The Complete Reference by David Salomon, Second Edition, 2000.
While a compressor (or encoder) compresses the original data in the input file into a smaller, lower-redundancy output file, a decompressor converts data in the opposite direction, restoring the lower-redundancy output file to its original (i.e., uncompressed) form. Thus, in order to reconstruct the data to its original form, the system or individual receiving the compressed output file must have a decompressor utility program capable of reading and restoring the compressed output file. To facilitate the decompression of files, many compressors allow the user to specifically create a self-extracting file, which when executed, decompresses the compressed output file or files.
Users may create self-extracting files by expressly specifying that a binary decompression engine be attached to an already existing compressed input file or archive. The self-extracting file is therefore an executable file that knows how to operate on the file or archive (i.e., list, test, extract) without help from an external decompressor utility. One problem with this system is that the process of creating such a self-extracting archive is cumbersome and requires multiple steps, especially if dealing with only a single file. In addition, to configure the self-extracting file to automatically launch a particular file upon decompression, the user must take yet additional steps.
Executable (EXE) compressors, such as the LZEXE program written by Fabrice Bellard, are special purpose compression utilities designed to compress PC EXE files, which can then be decompressed and executed with one command. Other EXE compressors include WWPack32, EXElite, and PETITE. Rather than write the decompressed file to disk, the decompressor for the EXE compressors loads the file into memory and launches the file from the memory location where it was extracted. For a more detailed description of EXE compressors, please refer to page 212 of Data Compression: The Complete Reference by David Salomon, Second Edition, 2000. One problem with EXE compressors is that they operate only with executable files (e.g., “.exe” and “.dll” files). Thus, EXE compressors can not compress other files that do not contain executable code.